/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.servinf.ani.sincronizador.entities;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author mortiz
 */
@Entity
@Table(catalog = "ani_admin", schema = "public")
@NamedQueries({
    @NamedQuery(name = "Intervencion.findAll", query = "SELECT i FROM Intervencion i")})
public class Intervencion implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_intervencion")
    private Integer idIntervencion;
    @Column(name = "id_intervencion_project")
    private String idIntervencionProject;
    @Column(name = "id_proyecto")
    private int idProyecto;
    @Column(name = "fecha_creacion")
    @Temporal(TemporalType.DATE)
    private Date fechaCreacion;
    @Column(name = "fecha_inicio")
    @Temporal(TemporalType.DATE)
    private Date fechaInicio;
    @Column(name = "fecha_finalizacion")
    @Temporal(TemporalType.DATE)
    private Date fechaFinalizacion;
    @Column(name = "fecha_modificacion")
    @Temporal(TemporalType.DATE)
    private Date fechaModificacion;
    @Column(name = "inversion_estimada")
    private Double inversionEstimada;
    @Column(name = "nombre_tarea")
    private String nombreTarea;
    private Double avance;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "intervencion")
    private List<TraficoRecaudo> traficoRecaudoList;
    @Column(name = "id_tramo_via")
    //@ManyToOne(optional = false)
    private int idTramoVia; //Se utiliza este tipo de dato para mantener la relación sin traer el objeto completo.
    @JoinColumn(name = "tipo_terreno", referencedColumnName = "id_tipo_terreno")
    @ManyToOne
    private TipoTerreno tipoTerreno;
    @JoinColumn(name = "tipo_intervencion", referencedColumnName = "id_tipo")
    @ManyToOne
    private TipoIntervencion tipoIntervencion;
    @JoinColumn(name = "estado_intervencion", referencedColumnName = "id_estado_interv")
    @ManyToOne
    private EstadoIntervencion estadoIntervencion;
    @JoinColumn(name = "area_encargada", referencedColumnName = "id_area")
    @ManyToOne(fetch = FetchType.LAZY)
    private Area areaEncargada;
    
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "idIntervencion", fetch = FetchType.EAGER)
    private Social social;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "idIntervencion", fetch = FetchType.EAGER)
    private Predial predial;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "idIntervencion", fetch = FetchType.EAGER)
    private Ambiental ambiental;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "idIntervencion", fetch = FetchType.EAGER)
    private Planeacion planeacion;
    
    public Intervencion() {
    }

    public Intervencion(Integer idIntervencion) {
        this.idIntervencion = idIntervencion;
    }

    public Intervencion(Integer idIntervencion, int idProyecto) {
        this.idIntervencion = idIntervencion;
        this.idProyecto = idProyecto;
    }

    public Integer getIdIntervencion() {
        return idIntervencion;
    }

    public void setIdIntervencion(Integer idIntervencion) {
        this.idIntervencion = idIntervencion;
    }

    public String getIdIntervencionProject() {
        return idIntervencionProject;
    }

    public void setIdIntervencionProject(String idIntervencionProject) {
        this.idIntervencionProject = idIntervencionProject;
    }

    public int getIdProyecto() {
        return idProyecto;
    }

    public void setIdProyecto(int idProyecto) {
        this.idProyecto = idProyecto;
    }

    public Date getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFinalizacion() {
        return fechaFinalizacion;
    }

    public void setFechaFinalizacion(Date fechaFinalizacion) {
        this.fechaFinalizacion = fechaFinalizacion;
    }

    public Date getFechaModificacion() {
        return fechaModificacion;
    }

    public void setFechaModificacion(Date fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }

    public Double getInversionEstimada() {
        return inversionEstimada;
    }

    public void setInversionEstimada(Double inversionEstimada) {
        this.inversionEstimada = inversionEstimada;
    }

    public String getNombreTarea() {
        return nombreTarea;
    }

    public void setNombreTarea(String nombreTarea) {
        this.nombreTarea = nombreTarea;
    }

    public Double getAvance() {
        return avance;
    }

    public void setAvance(Double avance) {
        this.avance = avance;
    }

    public List<TraficoRecaudo> getTraficoRecaudoList() {
        return traficoRecaudoList;
    }

    public void setTraficoRecaudoList(List<TraficoRecaudo> traficoRecaudoList) {
        this.traficoRecaudoList = traficoRecaudoList;
    }

    public int getIdTramoVia() {
        return idTramoVia;
    }

    public void setIdTramoVia(int idTramoVia) {
        this.idTramoVia = idTramoVia;
    }

    public TipoTerreno getTipoTerreno() {
        return tipoTerreno;
    }

    public void setTipoTerreno(TipoTerreno tipoTerreno) {
        this.tipoTerreno = tipoTerreno;
    }

    public TipoIntervencion getTipoIntervencion() {
        return tipoIntervencion;
    }

    public void setTipoIntervencion(TipoIntervencion tipoIntervencion) {
        this.tipoIntervencion = tipoIntervencion;
    }

    public EstadoIntervencion getEstadoIntervencion() {
        return estadoIntervencion;
    }

    public void setEstadoIntervencion(EstadoIntervencion estadoIntervencion) {
        this.estadoIntervencion = estadoIntervencion;
    }

    public Area getAreaEncargada() {
        return areaEncargada;
    }

    public void setAreaEncargada(Area areaEncargada) {
        this.areaEncargada = areaEncargada;
    }

    
    public Social getSocial() {
        return social;
    }

    public void setSocial(Social social) {
        this.social = social;
    }

    public Predial getPredial() {
        return predial;
    }

    public void setPredial(Predial predial) {
        this.predial = predial;
    }

    public Ambiental getAmbiental() {
        return ambiental;
    }

    public void setAmbiental(Ambiental ambiental) {
        this.ambiental = ambiental;
    }

    public Planeacion getPlaneacion() {
        return planeacion;
    }

    public void setPlaneacion(Planeacion planeacion) {
        this.planeacion = planeacion;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idIntervencion != null ? idIntervencion.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Intervencion)) {
            return false;
        }
        Intervencion other = (Intervencion) object;
        if ((this.idIntervencion == null && other.idIntervencion != null) || (this.idIntervencion != null && !this.idIntervencion.equals(other.idIntervencion))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.servinf.ani.sincronizador.entities.Intervencion[ idIntervencion=" + idIntervencion + 
                " nombre= " + nombreTarea +" idProject= "+idIntervencionProject+"]";
    }
    
}
